#ifndef _VEHICLE_H_
#define _VEHICLE_H_

#include <iostream>
#include <string>

using namespace std;

enum VehicleType { UNKNOWN, CAR, BOAT, AIRPLANE };

class Vehicle
{
public:

	Vehicle( string name,float speed, VehicleType type = UNKNOWN);

	virtual ~Vehicle( void );

	const string & GetName( void ) const { return m_name; }

	const float GetSpeed( void ) const { return m_speed; }

	// inline is optional - implict inline
	inline const VehicleType GetType( void )  const { return m_type; }

	virtual void TalkAboutSelf( void ) = 0;

private:

	string		m_name;
	float		m_speed;
	VehicleType m_type;

};

inline void Vehicle::TalkAboutSelf( void )
{
	cout << "I am a vehicle. I'm a generic vehicle type that should not have been instanced." << endl;
}

class child : public Vehicle
{
public:

	child( void ) : Vehicle("asdasdas", 321.0f, UNKNOWN ) { }

	virtual void TalkAboutSelf( void ) { Vehicle::TalkAboutSelf(); cout << "asdadasdas" << endl; }

};

#endif /* _VEHICLE_H_ */
